package com.xinqi.modules.chat.favorite.controller.web.utils;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.temporal.TemporalAdjusters;

public class LocalDateTimeUtils {
    /**
     * 当前时间减去传入天数
     *
     * @param day day
     * @return LocalDateTime
     */
    public static LocalDateTime getLocalDateTime(Long day) {
        LocalDateTime localDateTime = LocalDateTime.now();
        return localDateTime.plusDays(day);
    }

    /**
     * 获取当天开始时间
     *
     * @return LocalDateTime
     */
    public static LocalDateTime getDayStart() {
        LocalDateTime localDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
        return localDateTime;
    }

    /**
     * 获取当天结束时间
     *
     * @return LocalDateTime
     */
    public static LocalDateTime getDayEnd() {
        LocalDateTime localDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.MAX);
        return localDateTime;
    }

    /**
     * 一周的第一天
     *
     * @param localDate 当地日期
     * @return {@link LocalDateTime}
     */
    public static LocalDateTime firstDayOfWeek(LocalDateTime localDate) {
        return localDate.with(DayOfWeek.MONDAY);
    }

    /**
     * 一周的最后一天
     *
     * @param localDate 当地日期
     * @return {@link LocalDateTime}
     */
    public static LocalDateTime lastDayOfWeek(LocalDateTime localDate) {
        return localDate.with(DayOfWeek.SUNDAY);
    }

    /**
     * 月的第一天
     *
     * @param localDate 当地日期
     * @return {@link LocalDateTime}
     */
    public static LocalDateTime firstDayOfMonth(LocalDateTime localDate) {
        return localDate.with(TemporalAdjusters.firstDayOfMonth());
    }

    /**
     * 月的最后一天
     *
     * @param localDate 当地日期
     * @return {@link LocalDateTime}
     */
    public static LocalDateTime lastDayOfMonth(LocalDateTime localDate) {
        return localDate.with(TemporalAdjusters.lastDayOfMonth());
    }
}
